前一篇文章介紹了 Spring Data JDBC 的相關使用,今天我們要認識它的兄弟 Spring Data JPA
這兩個框架都是 Spring 家族的成員,但各有特色
讓我們一起來探索 Spring Data JPA 的相關功能吧 !
Spring Data JPA
是 Spring 生態系統中一個強大的 ORM 框架
它建立在 JPA
(Java Persistence API
) 規範之上,提供了一個更高層次的抽象,和更多便利的功能
Spring Data JPA 預設使用 Hibernate
作為其 JPA 提供者(ORM 套件)
Hibernate
是一個成熟且功能豐富的 ORM 框架,它實現了 JPA 規範,並提供了許多額外的特性
將之前的 Spring Data JDBC
依賴替換成 Spring Data JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
@Entity
@Table(name = "TODOS")
public class Todo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private boolean completed;
// 建構子、getter 和 setter
}
org.springframework.data
套件下的註解,JPA 使用 jakarta.persistence
套件下的註解@Entity
註解,JPA 需要@Table
直接指定表名,JPA 的 @Table
需要使用 name
屬性指定表名@GeneratedValue
註解來自動生成主鍵public interface TodoRepository extends JpaRepository<Todo, Long> {
}
JDBC 通常使用 CrudRepository
,而 JPA 使用 JpaRepository
JpaRepository
擴展自 ListCrudRepository
,後者又繼承自 CrudRepository
,因此 JpaRepository
提供了更多的功能
關係圖如下
Repository<T, ID>
^
|
+--------------+---------------+
| |
CrudRepository<T, ID> PagingAndSortingRepository<T, ID>
^ ^
| |
ListCrudRepository<T, ID> ListPagingAndSortingRepository<T, ID>
^ ^
| |
+------------------------------+
|
|
JpaRepository<T, ID> -----> QueryByExampleExecutor<T>
^
|
|
TodoRepository extends JpaRepository<Todo, Long>
controller 基本上不需要修改,因為 JpaRepository 提供了與 CrudRepository 相同的方法
Spring Data JDBC
。它提供簡潔的資料訪問方式,適合小型專案和簡單資料模型Spring Data JPA
。它適合大型專案,提供複雜資料關係處理和豐富的查詢功能Spring Data JDBC
的聚合概念更適合 DDD 實踐Spring Data JDBC
可能優於 Spring Data JPA。Spring Data JPA
在企業應用中更為普遍,擁有更廣泛的社區支持Spring Data JPA 提供了更豐富的功能和更強大的 ORM 能力,適合複雜的企業級應用
而 Spring Data JDBC 則更輕量、更簡單,適合小型專案或對性能和簡單性有特殊要求的場景
後面的文章,也會對 Spring Data JPA 的相關功能再更進一步地介紹
同步刊登於 Blog 「Spring Boot API 開發:從 0 到 1」Day 20 Spring Data JPA
我的粉絲專頁
圖片來源:AI 產生